The Transmission Control Protocol (TCP) is one of the core protocols of the Internet Protocol suite. The TCP provides reliable, ordered delivery of a stream of bytes from one computer application to another computer application and provides the transport layer for many fundamental Internet applications such a web traffic, mail, and file transfer. TCP has been optimized for wired transmission. As such, packet loss is assumed to be the result of network congestion, and TCP has many mechanisms geared to deal with congestion that is triggered by packet loss. These mechanisms may be erroneously applied in a wireless networking scenario. Packet loss is more likely to have occurred due to some sporadic event such as interference or shading. If a computer application leveraging TCP for transport experiences packet loss in a wireless network, congestion control mechanisms actually lead to network underutilization.
In addition to the basic issues described above, some networks have additional challenges. Some networks may be bandwidth constrained, requiring minimization of bandwidth usage. Some networks, such as power-line, wireless or WIFI, are half-duplex such that each end uses the same frequency to transmit and receive. In this case, a handshake or other back-off/contention mechanism is required to ensure that each member of the half-duplex network can transmit without colliding with another end station. These collision avoidance mechanisms are generally optimized for larger packet sizes, which influence the setting of their retry and back-off timers. This is particularly problematic for TCP Acknowledgement (ACK) packets, which are sent often by a computer application as it is receiving data from another computer application. If such a constrained network is involved in the path of this data stream, the collision avoidance handshake is invoked often as data is acknowledged. Since the TCP ACKs are small, they violate the assumptions of the collision avoidance protocols leading to additional underutilization.